package com.yun.blog.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * title        : SwaggerConfig
 * projectName  : dantouBlog-back
 * description  : swagger3配置类
 * author       : simple
 * email        : yun_simple@163.com
 * date         : 2023/2/10下午12:13
 */

@Configuration
// 开启swagger3
@EnableOpenApi
// 加 @EnableWebMvc 注解，不然会报空指针异常
@EnableWebMvc
public class SwaggerConfig {


    //Swagger的实例Bean是Docket对象，可以通过配置Docket实例来配置Swagger；
    @Bean
    public Docket docket(Environment environment) {
        // 配置在dev 和 test 环境生效,pro开启是因为部署后后台有个监控
        Profiles profiles = Profiles.of("dev", "test", "pro");
        boolean isDev = environment.acceptsProfiles(profiles);

        // 配置文档类型为 swagger3
        return new Docket(DocumentationType.OAS_30)
                // 配置是否开启，传递的是boolean，在上面判读过
                .enable(isDev)
                // 文档信息配置
                .apiInfo(apiInfo())
                // 配置扫描的接口
                .select()
                // 配置扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.yun.blog.controller"))
                .build();
    }

    // 配置项目信息，展示在接口文档上方
    @Bean
    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("DantouBlog 项目接口")
                .description("DantouBlog 项目接口,基于Swagger3")
                // 联系方式
                .contact(new Contact("dantou", "https://www.dantoublog.top", "yun_simple.163.com"))
                .version("1.0")
                .build();
    }


}
